package com.example.designpattern.behavioral.state.oop;

import org.junit.Test;

public class Client {

    /**
     * 可以看到，用户状态改变后，行为也随着改变了，这就是状态模式定义的由来，
     * 它的优点是：将与特定状态相关的行为封装到一个状态对象中，使用多态代替 if-else 或者 switch-case 状态判断。
     * 缺点是必然导致类增加，这也是使用多态不可避免的缺点。
     */
    @Test
    public void test() {
        // 用户初始状态为普通用户
        User user = new User();
        // 输出：模拟面试是 Plus 会员专享功能
        user.mockInterview();

        // 用户购买 Plus 会员，状态改变
        user.purchasePlus();
        // 输出：开始模拟面试
        user.mockInterview();

        // Plus 会员过期，变成普通用户，状态改变
        user.expire();
        // 输出：模拟面试是 Plus 会员专享功能
        user.mockInterview();
    }
}

